package day240110

import "fmt"

func M字节和字符() {
	s := "abcde刘"
	fmt.Println(len(s)) //8 , 英文 1字节，中文3字节 ,中英文都是 1 字符 []rune(s)字节转换字符

	s1 := s[0]
	fmt.Println(s1)        //输出的是 uint8格式 //97
	fmt.Printf("%T\n", s1) // uint8 类型 // uint8 类型

	//输出s类型
	s2 := fmt.Sprintf("%c", s1) //使用fmt.Sprintf("%c", s1)将字节值97转换回对应的字符'a'，并返回一个字符串类型。
	fmt.Println(s2)             //a
	fmt.Printf("%T\n", s2)      // string 类型

	//中文3个字节，如果取 1或2字节，会乱码
	s3 := s[5:8]    //取下标 5,6,7 不包括8
	fmt.Println(s3) //刘

	//len是字节长度， []rune是字符长度
	arr := []rune(s)      //将字符串s转换为[]rune类型，可以得到字符串中的字符数组
	fmt.Println(len(arr)) //5 字符长度
	fmt.Println(arr)      //[97 98 99 100 101 21016]其中97-100是'a'-'e'的ASCII码，  27704是'刘'的Unicode码点

	//for循环，（肯定是通过字符数确定循环次数，中文无法单独拿1 、 2字节）
	fmt.Println("for循环")
	for _, n := range s {
		fmt.Printf("%c\n", n) //   abcde刘

	}
}
